/**
 * Created by Administrator on 2017/4/9.
 */
var book = {
    '书名': 'jQuery 基础教程 (第4版)',
    '扉页': ['封面', '防伪页', '副封面', '图书在版编目 (CIP) 数据', '版权声明', '第3版译者序', '第1版译者序', '序', '前言'
    ],
    '目录': [
        {
            '第1章': 'jQuery 入门',
            '1.1': [
                'jQuery 能做什么',
                { '1': '取得文档中的元素' },
                { '2': '修改页面的外观' },
                { '3': '改变文档的内容' },
                { '4': '响应用户的交互操作' },
                { '5': '为页面添加动态效果' },
                { '6': '无需刷新页面从服务器获取信息' },
                { '7': '简化常见的 JavaScript 任务' }
            ],
            '1.2': [
                'jQuery 为什么如此出色',
                { '1': '利用 CSS 的优势' },
                { '2': '支持扩展' },
                { '3': '抽象浏览器不一致性' },
                { '4': '总是面向集合' },
                { '5': '将多得操作集于一行' }
            ],
            '1.3': '第一个 jQuery 驱动的页面',
            '1.3.1': '下载 jQuery',
            '1.3.2': '本书使用 jQuery 的哪个版本',
            '1.3.3': '在 HTML 文档中引用 jQuery',
            '1.3.4': [
                '编写 jQuery 代码',
                { '1': '查找诗歌文本' },
                { '2': '加入新类' },
                { '3': '执行代码' }
            ],
            '1.3.5': '最终结果',
            '1.4': '纯 JavaScript 与 jQuery',
            '1.5': '使用开发工具',
            '1.6': '小结'
        },
        {
            '第2章': '选择元素',
            '2.1': '理解 DOM',
            '2.2': '使用 $() 函数',
            '2.3': 'CSS 选择符',
            '2.4': '属性选择符',
            '2.5': '自定义选择符',
            '2.5.1': '每隔一行为表格添加样式',
            '2.5.2': '基于上下文内容选择元素',
            '2.5.3': '基于表单的选择符',
            '2.6': 'DOM 遍历方法',
            '2.6.1': '为特定单元格添加样式',
            '26.2': '连缀',
            '2.7': '访问 DOM 元素',
            '2.8': '小结',
            '2.9': '练习'
        },
        {
            '第3章': '事件',
            '3.1': '在页面加载后执行任务',
            '3.1.1': '代码执行的时机选择',
            '3.1.2': '基于一个页面执行多个脚本',
            '3.1.3': '.ready() 的简写形式',
            '3.1.4': '向 .ready() 回调函数中传入参数',
            '3.2': '处理简单的事件',
            '3.2.1': '简单的样式转换器',
            '3.2.2': '启用其他按钮',
            '3.2.3': '利用事件处理程序上下文',
            '3.2.4': '使用事件上下文进一步减小代码',
            '3.2.5': '简写事件',
            '3.2.6': '显示和隐藏高级特性',
            '3.3': '事件传播',
            '3.3.1': [
                '事件的旅程',
                { '1': '事件捕获' },
                { '2': '事件冒泡' }
            ],
            '3.3.2': '事件冒泡的副作用',
            '3.4': '通过事件对象改变事件的旅程',
            '3.4.1': '事件目标',
            '3.4.2': '停止事件传播',
            '3.4.3': '阻止默认操作',
            '3.4.4': '事件委托',
            '3.4.5': '使用内置的事件委托功能',
            '3.5': '移除事件处理程序',
            '3.5.1': '为事件处理程序添加命名空间',
            '3.5.2': '重新绑定事件',
            '3.6': '模仿用户操作',
            '3.7': '小结'
        },
        {
            '第4章': '样式与动画',
            '4.1': '修改内联 CSS',
            '4.1.1': '设置计算的样式属性值',
            '4.2': '隐藏和显示元素',
            '4.3': '效果和时长',
            '4.3.1': '指示显示速度',
            '4.3.2': '淡入和淡出',
            '4.3.3': '滑上和滑下',
            '4.3.4': '切换可见性',
            '4.4': '创建自定义动画',
            '4.4.1': '手工创建效果',
            '4.4.2': '一次给多个属性添加动画效果',
            '4.5': '并发与排队效果',
            '4.5.1': [
                '处理一组元素',
                { '1': '越过队列' },
                { '2': '手工队列' }
            ],
            '4.5.2': '处理多组元素',
            '4.5.3': '简单概括',
            '4.6': '小结',
            '4.7': '练习'
        },
        {
            '第5章': '操作 DOM',
            '5.1': '操作属性',
            '5.1.1': '非类属性',
            '5.1.2': 'DOM 元素属性',
            '5.1.3': '表单控件的值',
            '5.2': 'DOM 树操作',
            '5.2.1': '重新认识 $() 函数',
            '5.2.2': '创建新元素',
            '5.2.3': '插入新元素',
            '5.2.4': '移动元素',
            '5.2.5': '包装元素',
            '5.2.6': '使用反向插入方法',
            '5.3': '复制元素',
            '5.4': '内容 setter 和 getter 方法',
            '5.5': 'DOM 操作方法的简单归纳',
            '5.6': '小结',
            '5.7': '练习'
        },
        {
            '第6章': '通过 Ajax 发送数据',
            '6.1': '基于请求加载数据',
            '6.1.1': '追加 HTML',
            '6.1.2': [
                '操作 JavaScript 对象',
                { '1': '取得 JSON' },
                { '2': '使用全局 jQuery 函数' },
                { '3': '执行脚本' }
            ],
            '6.1.3': '加载 XML 文档',
            '6.2': '选择数据格式',
            '6.3': '向服务器传递数据',
            '6.3.1': '执行 GET 请求',
            '6.3.2': '执行 POST 请求',
            '6.3.3': '序列化表单',
            '6.4': '为 Ajax 请求提供不同的内容',
            '6.5': '关注请求',
            '6.6': '错误处理',
            '6.7': 'Ajax 和事件',
            '6.8': '安全限制',
            '6.9': '其他工具',
            '6.9.1': '低级 Ajax 方法',
            '6.9.2': '修改默认选项',
            '6.9.3': '部分加载 HTML 页面',
            '6.10': '小结',
            '6.11': '练习'
        },
        {
            '第7章': '使用插件',
            '7.1': '查找插件和帮助',
            '7.2': '使用插件',
            '7.2.1': '下载并包含 Cycle 插件',
            '7.2.2': '调用插件提供的方法',
            '7.2.3': '为插件方法指定参数',
            '7.2.4': '修改参数默认值',
            '7.3': '其他形式的插件',
            '7.3.1': '自定义选择符',
            '7.3.2': '全局函数插件',
            '7.4': 'jQuery UI 插件库',
            '7.4.1': [
                '效果',
                { '1': '颜色动画' },
                { '2': '基于类的动画' },
                { '3': '高级缓函数' },
                { '4': '其他效果' }
            ],
            '7.4.2': '交互组件',
            '7.4.3': '部件',
            '7.4.4': 'jQuery UI 主题卷轴',
            '7.5': 'jQuery Mobile 插件库',
            '7.5.1': 'HTML5 自定义数据属性',
            '7.5.2': '移动导航',
            '7.5.3': '一个文档支持多个页面',
            '7.5.4': '交互式元素',
            '7.5.5': '高级功能',
            '7.6': '小结',
            '7.7': '练习'
        },
        {
            '第8章': '开发插件',
            '8.1': '在插件中使用 $ 别名',
            '8.2': [
                '添加新的全局函数',
                '添加多个函数',
                { '1': '扩展全局 jQuery 对象' },
                { '2': '使用命名空间隔离函数' }
            ],
            '8.3': '添加 jQuery 对象方法',
            '8.3.1': '对象方法的上下文',
            '8.3.2': '隐式迭代',
            '8.3.3': '方法连缀',
            '8.4': '提供灵活的方法参数',
            '8.4.1': '参数对象',
            '8.4.2': '默认参数值',
            '8.4.3': '回调函数',
            '8.4.4': '可定制的默认值',
            '8.5': '使用 jQuery UI 部件工厂创建插件',
            '8.5.1': '创建部件',
            '8.5.2': '销毁部件',
            '8.5.3': '启用和禁用部件',
            '8.5.4': '接受部件选项',
            '8.5.5': '添加子方法',
            '8.6': '插件设计建议',
            '8.7': '小结',
            '8.8': '练习'
        },
        {
            '第9章': '高级选择符与遍历',
            '9.1': '深入选择与遍历',
            '9.1.1': '动态筛选表格内容',
            '9.1.2': '为表格添加条纹效果',
            '9.1.3': '组合',
            '9.1.4': '更多选择符与遍历方法',
            '9.2': '定制与优化选择符',
            '9.2.1': '编写定制的选择符插件',
            '9.2.2': [
                '选择符的性能问题',
                { '1': 'Sizzle 的选择符实现' },
                { '2': '测试选择符的速度' }
            ],
            '9.3': 'DOM 遍历背后的秘密',
            '9.3.1': 'jQuery 对象属性',
            '9.3.2': 'DOM 元素栈',
            '9.3.3': '编写 DOM 遍历方法插件',
            '9.3.4': ['DOM遍历的性能问题',
                { '1': '使用连缀来改进性能' },
                { '2': '使用缓存来改进性能' }
            ],
            '9.4': '小结',
            '9.5': '练习'
        },
        {
            '第10章': '高级事件处理',
            '10.1': '再谈事件',
            '10.1.1': '追加数据页面',
            '10.1.2': '悬停时显示数据',
            '10.2': '事件委托',
            '10.2.1': '使用 jQuery 的委托方法',
            '10.2.2': '选择委托的作用域',
            '10.2.3': '早委托',
            '10.3': '自定义事件',
            '10.3.1': '无限滚动',
            '10.3.2': '自定义事件参数',
            '10.4': '节流事件',
            '10.5': '扩展事件',
            '10.6': '小结',
            '10.7': '练习'
        },
        {
            '第11章': '高级效果',
            '11.1': '再谈动画 ',
            '11.2': '观测及中断动画',
            '11.2.1': '确认动画状态',
            '11.2.2': '中止运行的动画',
            '11.3': '全局效果',
            '11.3.1': '禁用所有效果',
            '11.3.2': '定义效果时长',
            '11.4': '多属性缓动',
            '11.5': '使用延迟对象',
            '11.6': '精细地控制动画',
            '11.7': '小结',
            '11.8': '练习'
        },
        {
            '第12章': '高级 DOM 操作',
            '12.1': '排序表格行',
            '12.1.1': '服务器端排序',
            '12.1.2': 'Ajax 排序',
            '12.1.3': 'JavaScript 排序',
            '12.2': '移动和插入元素',
            '12.2.1': '为已有的文本添加链接',
            '12.2.2': '简单的 JavaScript 数组排序',
            '12.2.3': '对 DOM 元素排序',
            '12.3': '在 DOM 元素中保存数据',
            '12.3.1': '执行预先计算',
            '12.3.2': '存储非字符串数据',
            '12.3.3': '变换排序方向',
            '12.4': '使用 HTML5 自定义数据属性',
            '12.5': '使用 JSON 排序和构建行',
            '12.5.1': '修改 JSON 对象',
            '12.6': '高级属性操作',
            '12.6.1': '简捷的创建元素',
            '12.6.2': 'DOM 创建挂钩',
            '12.7': '小结',
            '12.8': '练习'
        },
        {
            '第13章': '高级 Ajax',
            '13.1': '渐进增强与 Ajax',
            '13.2': '处理错误',
            '13.3': 'jqXHR 对象',
            '13.3.1': 'Ajax 承诺',
            '13.3.2': '缓存响应',
            '13.4': '截流 Ajax 请求',
            '13.5': '扩展 Ajax 功能',
            '13.5.1': '数据类型转换器',
            '13.5.2': 'Ajax 预过滤器'
        }
    ],
    '附录': [
        {
            'A': 'JavaScript 闭包'
        },
        {
            'B': '使用 QUnit 测试 JavaScript'
        },
        {
            'C': 'JavaScript 闭包'
        }
    ]
};